package com.hzz.dto.user;

import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.hzz.framework.dto.BaseDto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel("用户 DTO")
public class UserDto extends BaseDto {
    /**
     * id
     */
    Long id;
    /**
     * 用户账号
     */
    @ApiModelProperty("用户账号")
    @Size(max = 55, message = "account最大55字符")
    String account;
    /**
     * 行政区域id
     */
    @ApiModelProperty("行政区域id")
    @Size(max = 85, message = "areaId最大85字符")
    String areaId;
    /**
     * 行政区域名称
     */
    @ApiModelProperty("行政区域名称")
    @Size(max = 255, message = "areaName最大255字符")
    String areaName;
    /**
     * 头像url
     */
    @ApiModelProperty("头像url")
    @Size(max = 255, message = "avatar最大255字符")
    String avatar;
    /**
     * 用户电话
     */
    @ApiModelProperty("用户电话")
    @Size(max = 25, message = "cellphone最大25字符")
    String cellphone;
    /**
     * 主要职责
     */
    @ApiModelProperty("主要职责")
    @Size(max = 255, message = "coreResponsibility最大255字符")
    String coreResponsibility;
    /**
     * 登录次数
     */
    @ApiModelProperty("登录次数")
    Integer count;
    /**
     * 建立者id
     */
    Long createId;
    /**
     * 创建时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    Date dateCreated;
    /**
     * 更新时间
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    Date dateUpdated;
    /**
     * 删除标记
     */
    Integer delFlag;
    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    @Size(max = 55, message = "email最大55字符")
    String email;
    /**
     * 用户性别
     */
    @ApiModelProperty("用户性别")
    Integer gender;
    /**
     * 用户职务
     */
    @ApiModelProperty("用户职务")
    @Size(max = 55, message = "job最大55字符")
    String job;
    /**
     * 用户工号
     */
    @ApiModelProperty("用户工号")
    @Size(max = 22, message = "jobNo最大22字符")
    String jobNo;
    /**
     * 最后登录
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    Date lastLogin;
    /**
     * 用户级别
     */
    @ApiModelProperty("用户级别")
    @Size(max = 5, message = "level最大5字符")
    String level;
    /**
     * 备注
     */
    @Size(max = 255, message = "memo最大255字符")
    String memo;
    /**
     * 用户名称
     */
    @ApiModelProperty("用户名称")
    @NotNull(message = "name不能为空")
    @Size(max = 255, message = "name最大255字符")
    String name;
    /**
     * 排序
     */
    Integer orderNo;
    /**
     * 联系部门id
     */
    Long orgId;
    /**
     * 联系部门名称
     */
    @ApiModelProperty("联系部门名称")
    @Size(max = 55, message = "orgName最大55字符")
    String orgName;
    /**
     * 用户密码
     */
    @Size(max = 64, message = "password最大64字符")
    String password;
    /**
     * 警长电话
     */
    @ApiModelProperty("警长电话")
    @Size(max = 25, message = "policeCellphone最大25字符")
    String policeCellphone;
    /**
     * 警长名称
     */
    @ApiModelProperty("警长名称")
    @Size(max = 25, message = "policeName最大25字符")
    String policeName;
    /**
     * 用户河道id
     */
    @ApiModelProperty("用户河道id")
    String riverId;
    /**
     * 用户河道名称
     */
    @ApiModelProperty("用户河道名称")
    @Size(max = 55, message = "riverName最大55字符")
    String riverName;
    /**
     * 状态
     */
    Integer state;
    /**
     * 监督河道
     */
    @ApiModelProperty("监督河道")
    @Size(max = 55, message = "superviseRiverReach最大55字符")
    String superviseRiverReach;
    /**
     * 用户类型-1超级管理员0管理员1河长2普通人员
     */
    @ApiModelProperty("用户类型-1超级管理员0管理员1河长2普通人员18总河长19副总河长")
    Integer type;
    /**
     * 联系单位电话
     */
    @ApiModelProperty("联系单位电话")
    @Size(max = 25, message = "unitCellphone最大25字符")
    String unitCellphone;
    /**
     * 用户单位
     */
    @ApiModelProperty("用户单位")
    @Size(max = 55, message = "unitName最大55字符")
    String unitName;
    /**
     * 版本号
     */
    Integer version;


    /**
     * 员工角色名称集合
     */
    String roleNames;
    String originalPassword;
    String newPassword;
    String confirmPassword;
    /**
     * 超级管理员标记
     */
    Integer iissuperman;
    /**
     * 员工权限,匹配字符集合
     */
    Set<String> authorizationInfoPerms;
    /**
     * 员工角色,匹配字符集合
     */
    Set<String> authorizationInfoRoles;

    /**
     * 超级管理员
     */
    Integer isSuper;

    String verifyCode;
    /**
     * 固定电话
     */
    @Size(max = 55, message = "telephone最大55字符")
    String telephone;
    /**
     * 身份证号
     */
    @Size(max = 28, message = "idCard最大28字符")
    String idCard;
    /**
     * 联系地址
     */
    @Size(max = 55, message = "address最大55字符")
    String address;

    /**
     * 用户所在组织
     */
    List<OrgInfoDto> orgInfos;

    /**
     * 员工所在机构列表
     */
    Set<Long> staffOrgNode;

    /**
     * 当前区域类型(0国家 1省 2市 3区县 4乡镇 5村)
     */
    Integer currAreaType;

    /**
     * 当前区域Id
     */
    Long currAreaId;
    /**
     * 当前区域名称
     */
    String currAreaName;

    Set<Long> roleIds;

	/**
	 * 上级区域Id
	 */
	Long parentAreaId;

    List<Integer> types;
}
